<?php

require_once 'models/DAL/UsuarioDAO.php';

class Application_Model_Usuario {

    const ERRO_USUARIO_CADASTRADO = 1;
    const USUARIO_N_CADASTRADO = 2;
    const USUARIO_CADASTRO_SUCCESSO = 3;
    const USUARIO_ALTERADO_SUCCESSO = 3;

    /**
     *
     * @var Application_Model_DbTable
     */
    private $dbTable = null;
    private $documentos = NULL;
    private $contato = NULL;
    private $dadosPessoais = NULL;

    public function __construct() {
        $this->dbTable = new Application_Model_DbTable_Usuario();
        $this->documentos = new Application_Model_DbTable_Documentos();
        $this->contato = new Application_Model_DbTable_Contato();
        $this->dadosPessoais = new Application_Model_DbTable_DadosPessoais();
    }

    public function add(Application_Model_DAO_Usuario $usuario) {
        $db = $this->dbTable;
        $documentos = $this->documentos;
        $contatos = $this->contato;
        $dadosPessoais = $this->dadosPessoais;

//        echo '<pre>';
//        print_r($usuario);
//        exit();

        $dbContato = new Application_Model_DbTable_Contato();
        $retorno = NULL;
        $id = $usuario->getIdUsuario();
        if (empty($id)) {

            $selectEmail = $dbContato->select('*')->where('email = ?', $usuario->getNomeUsuario());
            $rs = count($dbContato->fetchRow($selectEmail));

            if ($rs !== 0) {
                $retorno = self::ERRO_USUARIO_CADASTRADO;
            } else
            if ($rs === 0) {

                $rs = $db->insert(array(
                    'nomeUsu' => $usuario->getNomeUsuario(),
                    'senha' => $usuario->getSenha(),
                    'ultimoLoginUsu' => NULL,
                    'tipoUsuario' => $usuario->getTipoUsuario(),
                    'estatusLogin' => (int) $usuario->getEstatusLogin()
                        )
                ); //fim insert

                $usuario->setIdUsuario((int) $rs);

                $usuario->getDocumentos()->setCodUsuario((int) $rs);
                foreach ($usuario->getContato() as $contato) {
                    $contato->setCodUsuario((int) $rs);
                }
                $usuario->getEndereco()->setCodUsuario((int) $rs);
                $usuario->getDadosPessoais()->setCodUsuario((int) $rs);

                if ($documentos->addDocumentos($usuario->getDocumentos())) {
                    if ($contatos->addContatos($usuario->getContato())) {
                        if ($dadosPessoais->addDadosPessoais($usuario->getDadosPessoais())) {
                            $retorno = self::USUARIO_CADASTRO_SUCCESSO;
                        }
                    }
                }
            }
        } else {
            $db->update(
                    array(
                'nomeUsu' => $usuario->getNomeUsuario(),
                'senha' => $usuario->getSenha(),
                'ultimoLoginUsu' => NULL,
                'tipoUsuario' => $usuario->getTipoUsuario(),
                'estatusLogin' => (int) $usuario->getEstatusLogin()
                    ), 'idUsuario =' . $usuario->getIdUsuario()
            );
        }
        return $retorno;
    }

    public function searchUsuario(Application_Model_DAO_Usuario $usuario) {
        $index = Zend_Search_Lucene::create('/data/indice');

        $doc = new Zend_Search_Lucene_Document();



        $doc->addField(Zend_Search_Lucene_Field::Keyword('nome', $usuario->getNomeUsuario()));
        $doc->addField(Zend_Search_Lucene_Field::Keyword('nome', $usuario->getNomeUsuario()));
        $doc->addField(Zend_Search_Lucene_Field::Keyword('nome', $usuario->getNomeUsuario()));
        $doc->addField(Zend_Search_Lucene_Field::Keyword('nome', $usuario->getNomeUsuario()));
    }

    public function getAllUsuarios() {
        $db = $this->dbTable;
        $rows = $db->fetchAll()->toArray();

        $return = array();

        foreach ($rows as $row) {
            $dao = new Application_Model_DAO_Usuario();

            $dao->setIdUsuario((int) $row['idUsuario']);
            $dao->setNomeUsuario($row['nomeUsu']);
            $dao->setUltimoLoginUsu(new DateTime($row['ultimoLoginUsu']));
            $dao->setTipoUsuario($row['tipoUsuario']);
            $dao->setEstatusLogin($row['estatusLogin'] ? 1 : 0);

            $return[] = $dao;
        }

        return $return;
    }

}

